package models

import (
	"errors"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/go-xorm/xorm"
	"log"
)

type Users struct {
	Id         int64 `xorm:"pk"`
	Username   string
	Password   string
	Mobile     string
	Email      string
	UpdateTime string
	CreateTime string
}

type Contacts struct {
	Userid     int64
	ContactsId int64
}

type Contacters struct {
	ContactsId   int64
	ContactsName string
}

var DbEngin *xorm.Engine

func init() {
	driverName := "mysql"
	DsName := "root:root@tcp(127.0.0.1:3306)/user?charset=utf8"
	var err error
	DbEngin, err = xorm.NewEngine(driverName, DsName)
	if err != nil {
		//直接退出和fmt.Printf不一样
		log.Fatal(err.Error()) //Fatal函数作用，如果模版渲染出错了，这个应用不用往下跑了，直接退出
	}
	//进行一些设置，在调试模式的设置
	//是否显示sql语句
	DbEngin.ShowSQL(true)
	//数据库最大链接数，线上环境自己设置，这个直接影响数据库的性能
	//DbEngin.SetMaxOpenConns(2)
	//自动建表User
	DbEngin.Sync2(new(Users))
	//打印一下是否初始化成功
	fmt.Println("init data base ok")
}

func Insert(username, password string) (error, Users) {
	var u Users
	res, err := DbEngin.Where("username=? and password=?", username, password).Get(&u)
	if err != nil {
		return err, Users{}
	}
	if !res {
		return errors.New("用户名不存在或者密码错误"), Users{}
	}
	fmt.Println(u)
	return nil, u
}

func GetContacts(userId int64) []Contacters {
	var cer []Contacters
	err := DbEngin.Where("user_id=?", userId).Join("LEFT", "contacts", "contacts.contacts_id=contacters.contacts_id").Find(&cer)
	if err != nil {
		fmt.Println(err)
		return []Contacters{}
	}
	fmt.Println(cer)
	return cer
}
